CfnCluster を Amazon Linux 2 にインストールしようとしたら出来なかった(ので pyenv を使った)話
小ネタです。
AWS 上に HPC 環境を構築するときには、CfnCluster を使うと便利です。
ただタイトルにも書いたことの繰り返しになりますが、これを Amazon Linux 2 (AL2) 上に普通にインストールしても、もとから入っている botocore のバージョン依存関係をクリアできずに起動しないという現象にでくわしました。
$ uname -sr Linux 4.14.47-64.38.amzn2.x86_64 $ sudo yum -y install python2-pip $ pip install cfncluster --user Collecting cfncluster : Successfully installed boto3-1.7.61 botocore-1.10.61 cfncluster-1.5.1 configparser-3.5.0 future-0.16.0 $ cfncluster --help Traceback (most recent call last): : pkg_resources.ContextualVersionConflict: (botocore 1.8.12 (/usr/lib/python2.7/site-packages), Requirement.parse('botocore<1.11.0,>=1.10.61'), set(['boto3']))
そういう時はきれいな状態から整えるのが一番手っ取り早いので、さくっと pyenv
を導入してしまいましょう。
そもそも CfnCluster とは
下記の記事をご参照下さい。
pyenv で解決
Amazon Linux 2 上で pyenv
をインストールするために、まずは Development Tools と必要なライブラリを yum
から入れます。
$ sudo yum -y groupinstall development $ sudo yum -y install openssl-devel bzip2-devel readline-devel sqlite-devel
その上で pyenv
を導入します。下記のドキュメントに従ってさくっと入れてしまいましょう。
$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv $ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile $ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile $ echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bash_profile $ source ~/.bash_profile
pyenv
が入ったら、2.7 系の現時点での最新バージョンである 2.7.15 をインストールします。
$ pyenv install 2.7.15
インストールには少々(インスタンスタイプによって差がありますが概ね数分程度)時間がかかりますので、気長目に待って下さい。
インストールが終わったら、 CfnCluster の作業で使用するディレクトリを作成します。ここでは ~/cfncluster
としました。そしてそのディレクトリから呼び出される Python の環境を pyenv
で設定しましょう。
$ mkdir ~/cfncluster && cd $_ $ pyenv local 2.7.15 $ which python ~/.pyenv/shims/python $ python --version Python 2.7.15
ちなみにですが、たまにシェルのキャッシュが効いてうまくバージョンが切り替わらなかったりすることがあります。手っ取り早いのは SSH でログインし直すことなので、動作がおかしいと思ったら一度ログアウトして入り直して下さい。
うまくいったら( pip
のアップグレードをした後で) CfnCluster をインストールします。
$ pip install --upgrade pip $ pip install cfncluster Collecting cfncluster : Successfully installed PyYAML-3.13 awscli-1.15.62 boto3-1.7.61 botocore-1.10.61 cfncluster-1.5.1 colorama-0.3.9 configparser-3.5.0 docutils-0.14 future-0.16.0 futures-3.2.0 jmespath-0.9.3 pyasn1-0.4.3 python-dateutil-2.7.3 rsa-3.4.2 s3transfer-0.1.13 six-1.11.0
こんどは入りました!
$ cfncluster --help usage: cfncluster [-h] [--config CONFIG_FILE] [--region REGION] [--nowait] {create,update,delete,start,stop,status,list,instances,configure,version} ... cfncluster is a tool to launch and manage a cluster. :
きちんと動作するようです。ついでにといってはアレですが、AWS CLI も最新のものがインストールされたようなので確認してみましょう。
$ aws --version aws-cli/1.15.62 Python/2.7.15 Linux/4.14.47-64.38.amzn2.x86_64 botocore/1.10.61
これで、CfnCluster を使う準備ができました。
まとめ
Amazon Linux 2 に CfnCluster 環境を整えるために pyenv
を使いました。これを使うと既存の環境をこわさずに Python の環境を作ることが可能なので、積極的に使っていきたいですね。